package com.xcw.test.caozuo;

/**
 * @author bhx
 * @Class P1_
 * @date 2022/11/13 1:52
 * @Description TODO
 */

import java.util.Scanner;

/**
 * 1、给定正整数N，从小到大输出N以内的完数。
 * 完数是指其所有因子之和等于该数本身。
 * (1）本题分值:20分
 * (2）考核时间: 36min
 * (3）考核形式:上机实操
 * (4）编程语言:C/C++、Python、Java任选一种语言
 * (5）输入:一些正整数N(1<N<10^4)
 * (6)输出:对于每个整数N，输出所有不大于N的完数。
 * (7）样例输入: 5000
 * (8）样例输出5000: 6 28 496
 */
public class P1_ {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        int num = 0;
       do {
           System.out.println("请输入一个正整数：");
           num = scanner.nextInt();
           if (((2>num)&&(num > Math.pow(10, 4)))){
               System.out.println("数字超出范围，请重新输入！");
           }
       }while ((2>num)&&(num > Math.pow(10, 4)));
       StringBuilder app = new StringBuilder();
        app.append(num + "：");
        for (int i = 2; i <= num; i++) {
            if (dealPerfectNumber(i)){
                app.append(i + " ");
            }
        }

        System.out.println(app.toString());


    }

    public static boolean dealPerfectNumber(int num){
        int sum = 0;
        for (int i = 1; i < num; i++) {

            if (num%i == 0){
               sum += i;
            }
        }
        return (sum == num);
    }
}
